<?php
    namespace Core\ORM\Requete;
    /**
     * Description of Insert
     *
     * @author mpetrini
     */
    class Insert extends \Core\ORM\Requete\Requete {
        /**
        * @var \Core\ORM\Modele $instance
        */
        protected $instance;
        /**
        * Constructeur complet
        * 
        * @param \Core\ORM\Modele $instance
        * 
        * @return void
        */
        public function __construct($instance) {
            $table = new \Core\ORM\Table(get_class($instance));
            parent::__construct($table);
            $this->instance=$instance;
        }
        /**
        * Servira à générer la Requête SQL 
        * 
        * @return string
        */
        public function creation() {
            $compteur = 0;
            $this->sql =    'INSERT INTO `'.$this->from->getNom().'` (';
            foreach($this->from->getChamps() as $attribut) {
                if($compteur > 0) {
                    $this->sql .=   ',';
                }
                $this->sql .=   '`'.$attribut->getNom().'`';
                $compteur++;
            }
            $this->sql .=   ') VALUES (';
            $compteur = 0;
            foreach($this->from->getChamps() as $attribut) {
                if($compteur > 0) {
                    $this->sql .=   ',';
                }
                $temp = 'get'.\Utils\Outils::toCamelCase($attribut->getNomAttribut(), true);
                /**
                * @todo Lancer une exception lors de l'ajout d'une valeur nulle dans une requete ou ce champs ne peut être nul
                */
                if($this->instance->$temp() === null) {
                    $this->sql .=   "NULL";
                }
                else {
                    $this->sql .=   \Core\ORM\ORMClasse::$lien->quote($attribut->getValeur($this->instance->$temp()));
                }
                $compteur++;
            }
            $this->sql .=   ');';
            return $this->sql;
        }
        /**
        * Execute une requête SQL DELETE préparée
        * 
        * @return int
        */
        public function execution() {
            parent::execution();
            if(empty($this->sql)) {
                $this->creation();
            }
            \Core\ORM\ORMClasse::$lien->exec($this->sql);
            return \Core\ORM\ORMClasse::$lien->lastInsertId();
        }
    }
?>
